草庐IT

C++ 对和指针

全部标签

c++ - asm.js-如何实现函数指针

注意:这个问题纯粹是关于asm.js的,而不是关于C++或任何其他编程语言的。标题已经说过:如何有效地实现函数指针?我在网上找不到任何东西,所以我想在这里问。编辑:我想在正在使用的编译器中实现虚函数。在C++中,我将执行以下操作来生成vtable:#includeclassBase{public:virtualvoiddoSomething()=0;};classDerived:publicBase{public:voiddoSomething(){std::coutdoSomething();return0;}更准确地说;如何在不需要纯JavaScript的情况下在asm.js中生成

c++ - 创建一个指向纯虚类的新指针

我有以下设计类:classMeal{public:virtualvoidcook()=0;//purevirtual}classOmelette:Meal{public:voidcook(){/*dosomething*/};//non-virtual}classWaffle:Meal{public:voidcook(){/*dosomething*/};//non-virtual}std::vector>menu;voidaddMeal(constMeal&meal){menu.emplace_back(newMeal(meal));//cannotallocateanobjecto

c++ - 在复制构造函数中复制唯一指针数组的内容

我的类包含一个指向数组的唯一指针。调用复制构造函数时,我希望该类创建自己的唯一指针数组,并只复制旧的唯一指针数组的内容。我不断收到关于从const值转换的错误,我不确定如何解决它。我的指针是这样声明的:std::unique_ptrmanagers;我打算只循环遍历数组并手动复制,所以我制作了这个复制构造函数:Restaurant::Restaurant(constRestaurant&_r){Manager*_managers=_r.managers;for(inti=0;i它在这一行给出了const转换错误:Manager*_managers=_r.managers;我只想深拷贝。

C++ 指针运行时错误

我用结构体和指针做了一个程序。但由于某种原因,它无法正常工作。主要问题是,for-loop不会按原样进行。如果你能解决这个问题会很有帮助#include#include#includeusingnamespacestd;structBook{stringname;intrelease;};intmain(){//localvariableinti;stringrelease_dte;intchoice;//interfacecout>choice;Book*Issue=newBook[choice];//forhandlerfor(i=0;i 最佳答案

c++ - 如何在运行时恢复函数指针的类型

在代码中,我在管理器类中注册了一个或多个函数指针。在这个类中,我有一个映射,将函数的参数类型映射到所述函数。它可能看起来像这样:std::map,void*>templatevoidRegister(Ret(*function)(Args...)){void*v=(void*)function;//recursivelybuildtypevectorandaddtothemap}在运行时,代码使用任意数量的参数获取调用(来自外部脚本)。这些参数可以作为原始数据类型或将在编译时指定的自定义类型读取。对于脚本的每次调用,我都必须找出要调用的函数,然后调用它。前者很容易并且已经解决了(在循环

c++ - 当需要指向全局函数的指针时如何使用指向成员函数的指针?

我有以下问题。我必须使用一个接受回调的函数。实现回调是棘手的部分,因为除了我可以从输入参数中提取的信息之外,我还需要更多信息。我将尝试举一个例子:typedefint(*fptr)(char*in,char*out);//thecallbackihavetoimplementinttakeFptr(fptrf,char*someOtherParameters);//themethodihavetouse问题是我需要除“in”参数之外的其他信息来构造“out”参数。我试过这种方法:classWrapper{public:intcallback(char*in,char*out){//us

c++ - 将空基类指针转换为子类指针?

我有一些代码使用了从基类类型到子类类型的有点偷偷摸摸的转换,其中子类类型被指定为模板参数。我假设因为基类没有声明数据成员并且大小为零,所以基类指针地址将与子类相同,并且转换将成功。到目前为止代码运行正确。这是我正在做的事情的简化版本:templatestructCppIterator{CppIterator(constRangeT&range){...}//...methodscallingRangeT'smembers};//Baseclass,providesbegin()/end()methods.templatestructCppIterableBase{CppIterator

c++ - 指向类模板成员的函数指针

我有这门课:templateclasslist{...boolmoreThan(Tx,Ty);boollessThan(Tx,Ty);...};我需要一个函数指针来改变我的类的行为,并在使用boolmoreThan(T,T)或boollessThan(T,T)之间切换。所以我目前正在使用:bool(list::*foo)(intx,inty);foo=&list::lessThan;并使用它:(this->*foo)(x,y);但我想要一个灵活的函数指针,这样我就可以将它用于我需要的任何T,而不仅仅是int。那么有没有办法创建一个指向类模板成员的函数指针呢?像这样的东西:templat

c++ - 如何区分重载函数的左值和右值成员函数指针?

我知道我可以这样做来区分右值函数名和左值函数指针:templatevoidtakeFunction(RET_TYPE(&function)(ARGs...)){coutvoidtakeFunction(RET_TYPE(*&function)(ARGs...)){cout而且我希望对成员函数做同样的事情。但是,它似乎没有翻译:structS;voidtakeMemberFunction(void(S::&function)())//errorC2589:'&':illegaltokenonrightsideof'::'{cout为什么?我知道的另一种方法是对常规函数执行此操作:void

c++ - 如何在 C++11 中存储任意方法指针?

我需要一种方法来存储方法指针列表,但我不关心它们属于哪个类。我想到了这一点:structMethodPointer{void*object;void(*method)(void);};然后我可以有一个采用任意方法的函数:templatevoidregister_method(void(T::*method)(void),T*obj){MethodPointerpointer={obj,method);}voiduse_method_pointer(){...MethodPointermp=...//callthemethod(mp.object->*method)();...}这显然无